{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.00632</td>\n",
       "      <td>18</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1</td>\n",
       "      <td>296</td>\n",
       "      <td>15</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.02731</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0.02729</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0.03237</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.06905</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM  ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \\\n",
       "0  0.00632  18   2.31     0  0.538  6.575  65.2  4.0900    1  296       15   \n",
       "1  0.02731   0   7.07     0  0.469  6.421  78.9  4.9671    2  242       17   \n",
       "2  0.02729   0   7.07     0  0.469  7.185  61.1  4.9671    2  242       17   \n",
       "3  0.03237   0   2.18     0  0.458  6.998  45.8  6.0622    3  222       18   \n",
       "4  0.06905   0   2.18     0  0.458  7.147  54.2  6.0622    3  222       18   \n",
       "\n",
       "        B  LSTAT  MEDV  \n",
       "0  396.90   4.98  24.0  \n",
       "1  396.90   9.14  21.6  \n",
       "2  392.83   4.03  34.7  \n",
       "3  394.63   2.94  33.4  \n",
       "4  396.90   5.33  36.2  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 准备数据\n",
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "df = pd.read_csv(\"boston_housing.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。\n",
    "\n",
    "    对连续型特征，可以用直方图来可视化其分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x17155186408>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# MEDV的直方图／分布\n",
    "sns.distplot(df[\"MEDV\"], bins=30, kde=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。\n",
    "\n",
    "    可以用DataFrame的corr方法计算相关系数，对计算得到的相关系数取绝对值，大于0.5的可以认为是强相关"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.24026493104775148"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 两个连续特征的相关性\n",
    "abs(df['RM'].corr(df['AGE']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7636514469209152"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "abs(df['INDUS'].corr(df['NOX']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x17157300208>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 所有特征的两两相关性矩阵\n",
    "data_corr = df.corr()\n",
    "abs_corr = data_corr.abs()\n",
    "sns.heatmap(abs_corr,annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。\n",
    "\n",
    "    选择带有L1正则的线性回归模型，通过训练求解得到稀疏解，可以淘汰一些特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 ，并重新训练最小二乘线性回归、岭回归、和Lasso模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 506 entries, 0 to 505\n",
      "Data columns (total 14 columns):\n",
      "CRIM       506 non-null float64\n",
      "ZN         506 non-null int64\n",
      "INDUS      506 non-null float64\n",
      "CHAS       506 non-null int64\n",
      "NOX        506 non-null float64\n",
      "RM         506 non-null float64\n",
      "AGE        506 non-null float64\n",
      "DIS        506 non-null float64\n",
      "RAD        506 non-null int64\n",
      "TAX        506 non-null int64\n",
      "PTRATIO    506 non-null int64\n",
      "B          506 non-null float64\n",
      "LSTAT      506 non-null float64\n",
      "MEDV       506 non-null float64\n",
      "dtypes: float64(9), int64(5)\n",
      "memory usage: 55.5 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 490 entries, 0 to 505\n",
      "Data columns (total 14 columns):\n",
      "CRIM       490 non-null float64\n",
      "ZN         490 non-null int64\n",
      "INDUS      490 non-null float64\n",
      "CHAS       490 non-null int64\n",
      "NOX        490 non-null float64\n",
      "RM         490 non-null float64\n",
      "AGE        490 non-null float64\n",
      "DIS        490 non-null float64\n",
      "RAD        490 non-null int64\n",
      "TAX        490 non-null int64\n",
      "PTRATIO    490 non-null int64\n",
      "B          490 non-null float64\n",
      "LSTAT      490 non-null float64\n",
      "MEDV       490 non-null float64\n",
      "dtypes: float64(9), int64(5)\n",
      "memory usage: 57.4 KB\n"
     ]
    }
   ],
   "source": [
    "df = df[df.MEDV < 50]\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分离特征和结果\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV', axis = 1)\n",
    "log_y = np.log1p(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 独热编码\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "X_cat = X[\"RAD\"]\n",
    "X_cat = pd.get_dummies(X_cat, prefix=\"RAD\")\n",
    "\n",
    "X = X.drop(\"RAD\", axis = 1)\n",
    "feat_names = X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RAD_1</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   RAD_1  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  RAD_24\n",
       "0      1      0      0      0      0      0      0      0       0\n",
       "1      0      1      0      0      0      0      0      0       0\n",
       "2      0      1      0      0      0      0      0      0       0\n",
       "3      0      0      1      0      0      0      0      0       0\n",
       "4      0      0      1      0      0      0      0      0       0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 去量纲\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "ss_X = MinMaxScaler()\n",
    "ss_y = MinMaxScaler()\n",
    "\n",
    "ss_log_y = MinMaxScaler()\n",
    "\n",
    "X = ss_X.fit_transform(X)\n",
    "y = ss_y.fit_transform(y.values.reshape(-1, 1))\n",
    "log_y = ss_y.fit_transform(log_y.values.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 保存预处理结果\n",
    "fe_data = pd.DataFrame(data = X, columns = feat_names, index = df.index)\n",
    "fe_data = pd.concat([fe_data, X_cat], axis = 1, ignore_index=False)\n",
    "fe_data[\"MEDV\"] = y\n",
    "fe_data[\"log_MEDV\"] = log_y\n",
    "fe_data.to_csv('FE_boston_housing.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.058148</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.268711</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.433790</td>\n",
       "      <td>0.674359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.234444</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348524</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.378995</td>\n",
       "      <td>0.626668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.234444</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348524</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.678082</td>\n",
       "      <td>0.842711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.053333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448173</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.648402</td>\n",
       "      <td>0.825183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.053333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448173</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.712329</td>\n",
       "      <td>0.862159</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.058148   0.0  0.314815  0.577505  0.641607  0.268711   \n",
       "1  0.000236  0.00  0.234444   0.0  0.172840  0.547998  0.782698  0.348524   \n",
       "2  0.000236  0.00  0.234444   0.0  0.172840  0.694386  0.599382  0.348524   \n",
       "3  0.000293  0.00  0.053333   0.0  0.150206  0.658555  0.441813  0.448173   \n",
       "4  0.000705  0.00  0.053333   0.0  0.150206  0.687105  0.528321  0.448173   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  \\\n",
       "0  0.208015      0.3  ...      0      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "\n",
       "   RAD_24      MEDV  log_MEDV  \n",
       "0       0  0.433790  0.674359  \n",
       "1       0  0.378995  0.626668  \n",
       "2       0  0.678082  0.842711  \n",
       "3       0  0.648402  0.825183  \n",
       "4       0  0.712329  0.862159  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 490 entries, 0 to 505\n",
      "Data columns (total 23 columns):\n",
      "CRIM        490 non-null float64\n",
      "ZN          490 non-null float64\n",
      "INDUS       490 non-null float64\n",
      "CHAS        490 non-null float64\n",
      "NOX         490 non-null float64\n",
      "RM          490 non-null float64\n",
      "AGE         490 non-null float64\n",
      "DIS         490 non-null float64\n",
      "TAX         490 non-null float64\n",
      "PTRATIO     490 non-null float64\n",
      "B           490 non-null float64\n",
      "LSTAT       490 non-null float64\n",
      "RAD_1       490 non-null uint8\n",
      "RAD_2       490 non-null uint8\n",
      "RAD_3       490 non-null uint8\n",
      "RAD_4       490 non-null uint8\n",
      "RAD_5       490 non-null uint8\n",
      "RAD_6       490 non-null uint8\n",
      "RAD_7       490 non-null uint8\n",
      "RAD_8       490 non-null uint8\n",
      "RAD_24      490 non-null uint8\n",
      "MEDV        490 non-null float64\n",
      "log_MEDV    490 non-null float64\n",
      "dtypes: float64(14), uint8(9)\n",
      "memory usage: 61.7 KB\n"
     ]
    }
   ],
   "source": [
    "fe_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.058148</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.268711</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.433790</td>\n",
       "      <td>0.674359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.234444</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348524</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.378995</td>\n",
       "      <td>0.626668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.234444</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348524</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.678082</td>\n",
       "      <td>0.842711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.053333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448173</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.648402</td>\n",
       "      <td>0.825183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.053333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448173</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.712329</td>\n",
       "      <td>0.862159</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.058148   0.0  0.314815  0.577505  0.641607  0.268711   \n",
       "1  0.000236  0.00  0.234444   0.0  0.172840  0.547998  0.782698  0.348524   \n",
       "2  0.000236  0.00  0.234444   0.0  0.172840  0.694386  0.599382  0.348524   \n",
       "3  0.000293  0.00  0.053333   0.0  0.150206  0.658555  0.441813  0.448173   \n",
       "4  0.000705  0.00  0.053333   0.0  0.150206  0.687105  0.528321  0.448173   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  \\\n",
       "0  0.208015      0.3  ...      0      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "\n",
       "   RAD_24      MEDV  log_MEDV  \n",
       "0       0  0.433790  0.674359  \n",
       "1       0  0.378995  0.626668  \n",
       "2       0  0.678082  0.842711  \n",
       "3       0  0.648402  0.825183  \n",
       "4       0  0.712329  0.862159  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 加载数据\n",
    "df = pd.read_csv(\"FE_boston_housing.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 490 entries, 0 to 489\n",
      "Data columns (total 23 columns):\n",
      "CRIM        490 non-null float64\n",
      "ZN          490 non-null float64\n",
      "INDUS       490 non-null float64\n",
      "CHAS        490 non-null float64\n",
      "NOX         490 non-null float64\n",
      "RM          490 non-null float64\n",
      "AGE         490 non-null float64\n",
      "DIS         490 non-null float64\n",
      "TAX         490 non-null float64\n",
      "PTRATIO     490 non-null float64\n",
      "B           490 non-null float64\n",
      "LSTAT       490 non-null float64\n",
      "RAD_1       490 non-null int64\n",
      "RAD_2       490 non-null int64\n",
      "RAD_3       490 non-null int64\n",
      "RAD_4       490 non-null int64\n",
      "RAD_5       490 non-null int64\n",
      "RAD_6       490 non-null int64\n",
      "RAD_7       490 non-null int64\n",
      "RAD_8       490 non-null int64\n",
      "RAD_24      490 non-null int64\n",
      "MEDV        490 non-null float64\n",
      "log_MEDV    490 non-null float64\n",
      "dtypes: float64(14), int64(9)\n",
      "memory usage: 88.2 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>count</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "      <td>490.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>mean</td>\n",
       "      <td>0.040878</td>\n",
       "      <td>0.110959</td>\n",
       "      <td>0.384190</td>\n",
       "      <td>0.059184</td>\n",
       "      <td>0.348369</td>\n",
       "      <td>0.514365</td>\n",
       "      <td>0.673316</td>\n",
       "      <td>0.245463</td>\n",
       "      <td>0.421760</td>\n",
       "      <td>0.614898</td>\n",
       "      <td>...</td>\n",
       "      <td>0.048980</td>\n",
       "      <td>0.075510</td>\n",
       "      <td>0.220408</td>\n",
       "      <td>0.222449</td>\n",
       "      <td>0.053061</td>\n",
       "      <td>0.034694</td>\n",
       "      <td>0.046939</td>\n",
       "      <td>0.259184</td>\n",
       "      <td>0.379815</td>\n",
       "      <td>0.598245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>std</td>\n",
       "      <td>0.098035</td>\n",
       "      <td>0.228319</td>\n",
       "      <td>0.252641</td>\n",
       "      <td>0.236209</td>\n",
       "      <td>0.240098</td>\n",
       "      <td>0.125148</td>\n",
       "      <td>0.290060</td>\n",
       "      <td>0.191997</td>\n",
       "      <td>0.320735</td>\n",
       "      <td>0.222742</td>\n",
       "      <td>...</td>\n",
       "      <td>0.216046</td>\n",
       "      <td>0.264483</td>\n",
       "      <td>0.414946</td>\n",
       "      <td>0.416316</td>\n",
       "      <td>0.224385</td>\n",
       "      <td>0.183190</td>\n",
       "      <td>0.211724</td>\n",
       "      <td>0.438634</td>\n",
       "      <td>0.179573</td>\n",
       "      <td>0.170660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>min</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>25%</td>\n",
       "      <td>0.000851</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.164815</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.131687</td>\n",
       "      <td>0.444530</td>\n",
       "      <td>0.428939</td>\n",
       "      <td>0.088635</td>\n",
       "      <td>0.177958</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.267123</td>\n",
       "      <td>0.511188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>50%</td>\n",
       "      <td>0.002711</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.331481</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.502778</td>\n",
       "      <td>0.761071</td>\n",
       "      <td>0.194631</td>\n",
       "      <td>0.272901</td>\n",
       "      <td>0.700000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.363014</td>\n",
       "      <td>0.611801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>75%</td>\n",
       "      <td>0.040925</td>\n",
       "      <td>0.120000</td>\n",
       "      <td>0.642963</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.491770</td>\n",
       "      <td>0.578080</td>\n",
       "      <td>0.936921</td>\n",
       "      <td>0.371045</td>\n",
       "      <td>0.914122</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.449201</td>\n",
       "      <td>0.686948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>max</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             CRIM          ZN       INDUS        CHAS         NOX          RM  \\\n",
       "count  490.000000  490.000000  490.000000  490.000000  490.000000  490.000000   \n",
       "mean     0.040878    0.110959    0.384190    0.059184    0.348369    0.514365   \n",
       "std      0.098035    0.228319    0.252641    0.236209    0.240098    0.125148   \n",
       "min      0.000000    0.000000    0.000000    0.000000    0.000000    0.000000   \n",
       "25%      0.000851    0.000000    0.164815    0.000000    0.131687    0.444530   \n",
       "50%      0.002711    0.000000    0.331481    0.000000    0.314815    0.502778   \n",
       "75%      0.040925    0.120000    0.642963    0.000000    0.491770    0.578080   \n",
       "max      1.000000    1.000000    1.000000    1.000000    1.000000    1.000000   \n",
       "\n",
       "              AGE         DIS         TAX     PTRATIO  ...       RAD_2  \\\n",
       "count  490.000000  490.000000  490.000000  490.000000  ...  490.000000   \n",
       "mean     0.673316    0.245463    0.421760    0.614898  ...    0.048980   \n",
       "std      0.290060    0.191997    0.320735    0.222742  ...    0.216046   \n",
       "min      0.000000    0.000000    0.000000    0.000000  ...    0.000000   \n",
       "25%      0.428939    0.088635    0.177958    0.500000  ...    0.000000   \n",
       "50%      0.761071    0.194631    0.272901    0.700000  ...    0.000000   \n",
       "75%      0.936921    0.371045    0.914122    0.800000  ...    0.000000   \n",
       "max      1.000000    1.000000    1.000000    1.000000  ...    1.000000   \n",
       "\n",
       "            RAD_3       RAD_4       RAD_5       RAD_6       RAD_7       RAD_8  \\\n",
       "count  490.000000  490.000000  490.000000  490.000000  490.000000  490.000000   \n",
       "mean     0.075510    0.220408    0.222449    0.053061    0.034694    0.046939   \n",
       "std      0.264483    0.414946    0.416316    0.224385    0.183190    0.211724   \n",
       "min      0.000000    0.000000    0.000000    0.000000    0.000000    0.000000   \n",
       "25%      0.000000    0.000000    0.000000    0.000000    0.000000    0.000000   \n",
       "50%      0.000000    0.000000    0.000000    0.000000    0.000000    0.000000   \n",
       "75%      0.000000    0.000000    0.000000    0.000000    0.000000    0.000000   \n",
       "max      1.000000    1.000000    1.000000    1.000000    1.000000    1.000000   \n",
       "\n",
       "           RAD_24        MEDV    log_MEDV  \n",
       "count  490.000000  490.000000  490.000000  \n",
       "mean     0.259184    0.379815    0.598245  \n",
       "std      0.438634    0.179573    0.170660  \n",
       "min      0.000000    0.000000    0.000000  \n",
       "25%      0.000000    0.267123    0.511188  \n",
       "50%      0.000000    0.363014    0.611801  \n",
       "75%      1.000000    0.449201    0.686948  \n",
       "max      1.000000    1.000000    1.000000  \n",
       "\n",
       "[8 rows x 23 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分离特征与输出\n",
    "from sklearn.metrics import r2_score\n",
    "y = df[\"MEDV\"]\n",
    "X = df.drop([\"MEDV\", \"log_MEDV\"], axis = 1)\n",
    "feat_names = X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分割训练集与测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(392, 21)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 线性回归\n",
    "from sklearn.linear_model import LinearRegression\n",
    "lr = LinearRegression()\n",
    "lr.fit(X_train, y_train)\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "      <th>coef_abs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.446699</td>\n",
       "      <td>0.446699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.345060</td>\n",
       "      <td>0.345060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.331288</td>\n",
       "      <td>0.331288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.191897</td>\n",
       "      <td>0.191897</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.180497</td>\n",
       "      <td>0.180497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.114821</td>\n",
       "      <td>0.114821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.109003</td>\n",
       "      <td>0.109003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.104658</td>\n",
       "      <td>0.104658</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.061897</td>\n",
       "      <td>0.061897</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.056163</td>\n",
       "      <td>0.056163</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.054486</td>\n",
       "      <td>0.054486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.041786</td>\n",
       "      <td>0.041786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.041508</td>\n",
       "      <td>0.041508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.039532</td>\n",
       "      <td>0.039532</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.033091</td>\n",
       "      <td>0.033091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>-0.024599</td>\n",
       "      <td>0.024599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.021226</td>\n",
       "      <td>0.021226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.020636</td>\n",
       "      <td>0.020636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.013261</td>\n",
       "      <td>0.013261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011200</td>\n",
       "      <td>0.011200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.008079</td>\n",
       "      <td>0.008079</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns      coef  coef_abs\n",
       "5        RM  0.446699  0.446699\n",
       "11    LSTAT -0.345060  0.345060\n",
       "7       DIS -0.331288  0.331288\n",
       "0      CRIM -0.191897  0.191897\n",
       "9   PTRATIO -0.180497  0.180497\n",
       "4       NOX -0.114821  0.114821\n",
       "8       TAX -0.109003  0.109003\n",
       "1        ZN  0.104658  0.104658\n",
       "20   RAD_24  0.061897  0.061897\n",
       "17    RAD_6 -0.056163  0.056163\n",
       "12    RAD_1 -0.054486  0.054486\n",
       "6       AGE -0.041786  0.041786\n",
       "10        B  0.041508  0.041508\n",
       "19    RAD_8  0.039532  0.039532\n",
       "18    RAD_7  0.033091  0.033091\n",
       "2     INDUS -0.024599  0.024599\n",
       "14    RAD_3  0.021226  0.021226\n",
       "13    RAD_2 -0.020636  0.020636\n",
       "15    RAD_4 -0.013261  0.013261\n",
       "16    RAD_5 -0.011200  0.011200\n",
       "3      CHAS  0.008079  0.008079"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lr.coef_.T)), \"coef_abs\": list(abs(lr.coef_.T))})\n",
    "fs.sort_values(by=['coef_abs'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5225653921774465"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "      <th>coef_abs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.395035</td>\n",
       "      <td>0.395035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.339642</td>\n",
       "      <td>0.339642</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.256161</td>\n",
       "      <td>0.256161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.172393</td>\n",
       "      <td>0.172393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.114341</td>\n",
       "      <td>0.114341</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.093558</td>\n",
       "      <td>0.093558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.085608</td>\n",
       "      <td>0.085608</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.085307</td>\n",
       "      <td>0.085307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.053323</td>\n",
       "      <td>0.053323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.052312</td>\n",
       "      <td>0.052312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.041590</td>\n",
       "      <td>0.041590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.041265</td>\n",
       "      <td>0.041265</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.041070</td>\n",
       "      <td>0.041070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.037780</td>\n",
       "      <td>0.037780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>-0.035498</td>\n",
       "      <td>0.035498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.028009</td>\n",
       "      <td>0.028009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.024440</td>\n",
       "      <td>0.024440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.014839</td>\n",
       "      <td>0.014839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.011405</td>\n",
       "      <td>0.011405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.007512</td>\n",
       "      <td>0.007512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.007125</td>\n",
       "      <td>0.007125</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns      coef  coef_abs\n",
       "5        RM  0.395035  0.395035\n",
       "11    LSTAT -0.339642  0.339642\n",
       "7       DIS -0.256161  0.256161\n",
       "9   PTRATIO -0.172393  0.172393\n",
       "0      CRIM -0.114341  0.114341\n",
       "8       TAX -0.093558  0.093558\n",
       "1        ZN  0.085608  0.085608\n",
       "4       NOX -0.085307  0.085307\n",
       "12    RAD_1 -0.053323  0.053323\n",
       "17    RAD_6 -0.052312  0.052312\n",
       "20   RAD_24  0.041590  0.041590\n",
       "10        B  0.041265  0.041265\n",
       "19    RAD_8  0.041070  0.041070\n",
       "6       AGE -0.037780  0.037780\n",
       "2     INDUS -0.035498  0.035498\n",
       "18    RAD_7  0.028009  0.028009\n",
       "14    RAD_3  0.024440  0.024440\n",
       "15    RAD_4 -0.014839  0.014839\n",
       "3      CHAS  0.011405  0.011405\n",
       "13    RAD_2 -0.007512  0.007512\n",
       "16    RAD_5 -0.007125  0.007125"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 岭回归\n",
    "from sklearn.linear_model import Ridge\n",
    "ridge = Ridge()\n",
    "ridge.fit(X_train, y_train)\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "fs_ridge = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((ridge.coef_.T)), \"coef_abs\": list(abs(ridge.coef_.T))})\n",
    "fs_ridge.sort_values(by=['coef_abs'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5115767597675877"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ridge.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "      <th>coef_abs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.446295</td>\n",
       "      <td>0.446295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.373623</td>\n",
       "      <td>0.373623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.155970</td>\n",
       "      <td>0.155970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.127873</td>\n",
       "      <td>0.127873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.063136</td>\n",
       "      <td>0.063136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.039433</td>\n",
       "      <td>0.039433</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.038652</td>\n",
       "      <td>0.038652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.026810</td>\n",
       "      <td>0.026810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.025413</td>\n",
       "      <td>0.025413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.025316</td>\n",
       "      <td>0.025316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.018272</td>\n",
       "      <td>0.018272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.016068</td>\n",
       "      <td>0.016068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>-0.014123</td>\n",
       "      <td>0.014123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.010723</td>\n",
       "      <td>0.010723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008058</td>\n",
       "      <td>0.008058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns      coef  coef_abs\n",
       "5        RM  0.446295  0.446295\n",
       "11    LSTAT -0.373623  0.373623\n",
       "9   PTRATIO -0.155970  0.155970\n",
       "7       DIS -0.127873  0.127873\n",
       "8       TAX -0.063136  0.063136\n",
       "4       NOX -0.039433  0.039433\n",
       "1        ZN  0.038652  0.038652\n",
       "17    RAD_6 -0.026810  0.026810\n",
       "12    RAD_1 -0.025413  0.025413\n",
       "14    RAD_3  0.025316  0.025316\n",
       "19    RAD_8  0.018272  0.018272\n",
       "10        B  0.016068  0.016068\n",
       "2     INDUS -0.014123  0.014123\n",
       "6       AGE -0.010723  0.010723\n",
       "15    RAD_4 -0.008058  0.008058\n",
       "18    RAD_7  0.000000  0.000000\n",
       "0      CRIM -0.000000  0.000000\n",
       "16    RAD_5 -0.000000  0.000000\n",
       "13    RAD_2  0.000000  0.000000\n",
       "3      CHAS  0.000000  0.000000\n",
       "20   RAD_24  0.000000  0.000000"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lasso模型\n",
    "from sklearn.linear_model import Lasso\n",
    "lasso = Lasso(0.001)\n",
    "lasso.fit(X_train, y_train)\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "fs_lasso = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lasso.coef_.T)), \"coef_abs\": list(abs(lasso.coef_.T))})\n",
    "fs_lasso.sort_values(by=['coef_abs'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4302419339194892"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso.intercept_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is 0.691834670320638\n",
      "The r2 score of LinearRegression on train is 0.8001507257439991\n"
     ]
    }
   ],
   "source": [
    "# 线性回归评价\n",
    "print('The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))\n",
    "print('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "def linear_scatter(y_train, y_train_pred, y_test, y_test_pred):\n",
    "    plt.scatter(y_train, y_train_pred, marker='o', color='green', label='train')\n",
    "    plt.scatter(y_test, y_test_pred, marker='*', color='blue', label='test')\n",
    "    plt.plot([-3, 3], [-3, 3], '--r')\n",
    "    plt.axis('tight')\n",
    "    plt.xlabel(\"True price\")\n",
    "    plt.ylabel(\"Predicted price\")\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 散点图查看估计值与真值得线性拟合情况\n",
    "linear_scatter(y_train, y_train_pred_lr, y_test, y_test_pred_lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.693253301059839\n",
      "The r2 score of RidgeCV on train is 0.8000790186112842\n",
      "alpha is: 0.1\n"
     ]
    }
   ],
   "source": [
    "# 多alpha值岭回归\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "alphas = [ 1e-5,1e-4,1e-3,1e-2,1e-1,1,1e1,1e2,1e3,1e4,1e5]\n",
    "#ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "ridge = RidgeCV()  \n",
    "ridge.fit(X_train, y_train)    \n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "print('The r2 score of RidgeCV on test is', r2_score(y_test, y_test_pred_ridge))\n",
    "print('The r2 score of RidgeCV on train is', r2_score(y_train, y_train_pred_ridge))\n",
    "print('alpha is:', ridge.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 散点图查看估计值与真值得线性拟合情况\n",
    "linear_scatter(y_train, y_train_pred_ridge, y_test, y_test_pred_ridge)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is 0.6472444626686267\n",
      "The r2 score of LassoCV on train is 0.790725900356462\n",
      "alpha is: 0.0005447049278906209\n"
     ]
    }
   ],
   "source": [
    "# 多alpha值Lasso回归\n",
    "from sklearn.linear_model import  LassoCV\n",
    "alphas = [ 1e-5,1e-4,1e-3,1e-2,1e-1,1,1e1,1e2,1e3,1e4,1e5]\n",
    "#lasso = LassoCV(alphas=alphas)\n",
    "lasso = LassoCV(cv=3)\n",
    "lasso.fit(X_train, y_train)    \n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "print('The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso))\n",
    "print('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso))\n",
    "print('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 散点图查看估计值与真值得线性拟合情况\n",
    "linear_scatter(y_train, y_train_pred_lasso, y_test, y_test_pred_lasso)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    - 最小二乘： 适用与特征之间相关性不强的数据\n",
    "    - 岭回归： 适用与特征之间有一些相关性的数据\n",
    "    - Lasso回归： 适用与特征之前有很多强相关性的数据\n",
    "    \n",
    "    最小二乘线性回归中，目标函数只考虑了模型对训练样本的拟合程度，容易过拟合。 ​岭回归使得线性回归系数收缩，模型稳定。当输入特征之间存在共线性时使用较好。 ​ lasso也会收缩回归系数。当正则参数取合适值时，使得有些线性回归系数为0，得到稀疏模型。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
